import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router';
import { ErrorPageRoute, LoginRoute, MainRoute } from "@/router/common.router";
import { sessionStorage } from "@/utils/StorageUtils.ts";
import { ProgressUtils } from "@/utils/InteractiveUtils.ts";

type IRouterType = {
    default: RouteRecordRaw[] | RouteRecordRaw
}

const modules = import.meta.glob<IRouterType>('./modules/*.router.ts', { eager: true });

const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: [LoginRoute, ErrorPageRoute, MainRoute],
    strict: true,
    scrollBehavior: () => ({ left: 0, top: 0 }),
})

// 动态添加路由
Object.keys(modules).forEach(key => {
    const route = modules[key].default;
    if (Array.isArray(route)) {
        route.forEach( item => {
            router.addRoute(item);
        })
    }else {
        router.addRoute(route);
    }
})


// 不需要登陆就可以访问的路由
const noLogin = ['Login'];

// 路由前置守卫
router.beforeEach(async (to, from, next) => {
    ProgressUtils.start();
    console.log(to, from);
    // 验证路由是否存在
    const hasRoute = to.matched.length === 0
    if (hasRoute) {
        return next('/404');
    }
    // 不用登录的路由可直接跳转
    if (noLogin.indexOf(<string>to.name) !== -1) {
        return next();
    } else {
        let isLogin = sessionStorage.get('isLogin') === 'true';
        // 如果没有登录，跳转到登录页面
        if (isLogin) {
            return next();
        } else {
            return next('/login');
        }
    }
})

// 路由后置守卫
router.afterEach((to) => {
    const metaTitle = String(to.meta.title);
    document.title = metaTitle ? metaTitle : '后台管理系统';
    ProgressUtils.success();
})

// 路由错误处理
router.onError((error) => {
    console.error('Router Error:', error);
    ProgressUtils.error();
    // 可以在这里处理错误页面的跳转
    router.push('/404');
})

export default router;
